home *** CD-ROM | disk | FTP | other *** search
- DATA SEGMENT AT 40H
- ORG 1AH
- BUFFER_HEAD DW ?
- BUFFER_TAIL DW ?
- KB_BUFFER DW 16 DUP(?)
- KB_BUFFER_END DW ?
- DATA ENDS
- CODE SEGMENT PARA PUBLIC
- ASSUME CS:CODE,DS:CODE
- ORG 100H
- START: MOV DI,OFFSET KBFR
- MOV SI,81H
- SUB BX,BX
- LOOP5: PUSH BX
- SUB BX,BX
- SUB DX,DX
- LOOP6: LODSB
- CMP AL,'"'
- JZ LOOP9
- CMP AL,' '
- JZ LOOP7
- CMP AL,13
- JZ LOOP8
- CMP AL,'0'
- JC L5ERR
- CMP AL,'9'+1
- JC L5OK
- AND AL,5FH
- CMP AL,'A'
- JC L5ERR
- CMP AL,'G'
- JNC L5ERR
- SUB AL,7
- L5OK: AND AL,15
- INC BX
- ROL DX,1
- ROL DX,1
- ROL DX,1
- ROL DX,1
- OR DL,AL
- JMP LOOP6
- LOOP9: LODSB
- CMP AL,'"'
- JZ LOOP10
- CMP AL,13
- JZ LOOP11
- LOOP13: SUB AH,AH
- INC BX
- STOSW
- JMP LOOP9
- LOOP10: CMP AL,[SI]
- JZ LOOP12
- MOV AX,BX
- POP BX
- ADD BX,AX
- JMP LOOP5
- LOOP11: MOV AX,BX
- POP BX
- ADD BX,AX
- MOV AX,13
- STOSW
- INC BX
- JMP SHORT EXIT
- LOOP12: LODSB
- JMP LOOP13
- LOOP7: OR BX,BX
- JZ LOOP6
- POP BX
- MOV AX,DX
- STOSW
- INC BX
- JMP LOOP5
- LOOP8: OR BX,BX
- POP BX
- JZ EXIT
- MOV AX,DX
- STOSW
- INC BX
- JMP SHORT EXIT
- L5ERR: POP BX
- RET
- EXIT: MOV SI,OFFSET KBFR
- MOV CX,BX
- MOV AX,40H
- MOV DS,AX
- ASSUME DS:DATA
- MOV BX,BUFFER_TAIL
- CLI
- PUSH CX
- LOOP2: LODS CS:KBFR
- MOV [BX],AX
- INC BX
- INC BX
- CMP BX,OFFSET KB_BUFFER_END
- JNE LOOP3
- MOV BX,OFFSET KB_BUFFER
- LOOP3: MOV BUFFER_TAIL,BX
- LOOP LOOP2
- STI
- MOV AX,CS
- MOV DS,AX
- POP CX
- LOOP4: PUSH CX
- MOV AH,2
- MOV DL,13
- INT 21H
- POP CX
- LOOP LOOP4
- RET
- KBFR DW 16 DUP(0)
- CODE ENDS
- END START
- OP CX
- LOOP4: PUSH CX
- MOV AH,2
- MOV